// 添加缺失的导入语句
import { request, getFullImageUrl, initBaseUrl } from '../../utils/request';
import Header from '@/components/common/Header.vue';
export default {
  components: {
    Header
  },
  data() {
    return {
      headerData: {
        title: '聊天详情',
        showBack: true,
        subtitle: ''// 新增：用户标签
      },
      messages: [], // 聊天消息列表
      inputMessage: '', // 输入框消息
      otherUserId: '', // 对方用户ID
      otherUserName: '', // 对方用户名
      otherAvatar: '', // 对方头像
      myAvatar: '', // 我的头像
      session_id: '', // 聊天ID
      socketTask: null, // WebSocket连接对象
      jobInfo: {
        people: '2人',
        gender: '女生、',
        age: '26岁、',
        height: '168cm',
        date: '05/24',
        time: '09:00-18:00',
        skills: '会摄影、视频剪辑',
        location: '广州市 | 海珠区新港东新华中心（双塔路南）',
        distance: '距您：364m',
        duration: '13分钟',
        statusImage: '',
        subtitle: ''
      },
      jobId: '', // 新增jobId参数
      jobInfo: {}, // 清空初始数据
      scrollToView: '',
      windowHeight: 0
    };
  },
  async onLoad(options) {
    try {
      console.log('进入聊天页面', options); // 添加options打印用于调试
      uni.showToast({title: '聊天页面加载中', icon: 'loading', duration: 1000}); // 添加加载提示
      if (!options) {
        console.error('options参数不存在');
        uni.showToast({ title: '页面参数错误', icon: 'error' });
        return;
      }
      
      // 获取页面参数
      this.otherUserId = options.otherUserId || '';
      this.otherUserName = decodeURIComponent(options.otherUserName) || '未知用户';
      this.otherAvatar = options.otherAvatar || '/static/image/logo.jpg';
      this.session_id = options.session_id || '';
      this.statusImage = options.statusImage || '';
  
      this.myAvatar = uni.getStorageSync('userAvatar') || '/static/image/logo.jpg';
      this.jobId = options.jobId || '';
      console.log('jobId:', this.jobId);
  
      // 优化：并行执行异步操作
      await Promise.all([
        this.getJobDetail(),
        initBaseUrl()
      ]);
  
      await this.getChatHistory();
      this.listenWebSocketMessage();
  
      uni.getSystemInfo({
        success: (res) => {
          this.windowHeight = res.windowHeight - 200;
        },
        fail: (err) => {
          console.error('获取系统信息失败:', err);
          this.windowHeight = 500; // 设置默认高度
        }
      });
    } catch (error) {
      console.error('onLoad执行异常:', error);
      uni.showToast({
        title: '页面加载失败',
        icon: 'none'
      });
    }
  },
  watch: {
    // 监听消息数组变化，自动滚动到底部
    messages: {
      handler() {
        this.$nextTick(() => {
          // 设置滚动到最新消息的id
          this.scrollToView = 'message' + (this.messages.length - 1);
        });
      },
      deep: true
    }
  },
  methods: {
    getFullImageUrl,
    // 获取聊天历史记录
    async getChatHistory() {
      try {
        const res = await request({
          url: `Myjobs/chatHistory?session_id=${this.session_id}&page=1&pageSize=50`,
          method: 'GET'
        });

        if (res.code === 200) {
          this.messages = res.data.map(msg => ({
            ...msg,
            isMine: msg.sender_id === uni.getStorageSync('uid')
            // 移除手动设置的sender_avatar
          }));
        }
      } catch (error) {
        console.error('获取聊天历史失败:', error);
        uni.showToast({
          title: '获取聊天记录失败',
          icon: 'none'
        });
      }
    },

    // 监听WebSocket消息
    listenWebSocketMessage() {
      uni.$on('websocket-message', (message) => {
        try {
          // 新增：检查消息是否为空或不是JSON格式
          if (!message || typeof message !== 'string' ||
              (message.charAt(0) !== '{' && message.charAt(0) !== '[')) {
            console.error('接收到无效的JSON消息:', message);
            return;
          }

          const parsedMsg = JSON.parse(message);
          if (parsedMsg.type === 'new_message') {
            if (parsedMsg.data.session_id === this.session_id) {
              // 检查发送者是否为当前用户
              if (parsedMsg.data.sender_id === uni.getStorageSync('uid')) {
                // 添加消息到列表
                this.messages.push({
                  content: parsedMsg.data.content,
                  senderId: parsedMsg.data.sender_id,
                  isMine: true,
                  time: new Date().toLocaleTimeString(),
                  sender_avatar: parsedMsg.data.sender_avatar // 添加对方的头像
                });
              }else{
     // 添加消息到列表
                this.messages.push({
                  content: parsedMsg.data.content,
                  senderId: parsedMsg.data.sender_id,
                  isMine: false,
                  time: new Date().toLocaleTimeString(),
                  sender_avatar: parsedMsg.data.sender_avatar // 添加对方的头像
                });
              }
        
            
            } else {
              console.log('Session ID mismatch:', parsedMsg.data.session_id, 'vs', this.session_id);
            }
          } else {
            console.log('Message type not new_message:', parsedMsg.type);
          }
        } catch (error) {
          console.error('解析WebSocket消息失败:', error, '消息内容:', message);
          // 可以选择在这里添加其他错误处理逻辑，比如通知用户
        }
      });
    },
    // 发送消息
    sendMessage() {
      if (!this.inputMessage.trim()) return;

      // 修改：移除手动构建的message对象
      // 使用HTTP请求调用后端sendMessage接口
      request({
        url: 'Myjobs/sendMessage',
        method: 'POST',
        data: {
          session_id: this.session_id,
          content: this.inputMessage
        }
      }).then(res => {
        if (res.code === 200) {
        
          // 清空输入框
          this.inputMessage = '';

          this.$nextTick(() => {
            this.scrollToView = 'message' + (this.messages.length - 1);
          });
        } else {
          uni.showToast({
            title: '消息发送失败',
            icon: 'none'
          });
        }
      }).catch(error => {
        console.error('发送消息失败:', error);
        uni.showToast({
          title: '网络错误，发送失败',
          icon: 'none'
        });
      });
    },

    // 新增：获取兼职详情
    async getJobDetail() {
      try {
        // 获取定位信息
        const location = await uni.getLocation({
          type: 'gcj02', // 使用微信小程序的火星坐标系
          altitude: false
        });

        // 添加lat和lng参数到请求URL
        const res = await request({
          url: `Myjobs/getJobDetail?job_id=${this.jobId}&lat=${location.latitude}&lng=${location.longitude}`,
          method: 'GET'
        });

        if (res.code === 200) {
          this.jobInfo = res.data;
        }
      } catch (error) {
        // 处理定位授权失败情况
        if (error.errMsg && error.errMsg.includes('auth deny')) {
          uni.showToast({
            title: '请开启位置权限以获取完整服务',
            icon: 'none'
          });
        } else {
          console.error('获取兼职详情失败:', error);
          uni.showToast({
            title: '获取兼职信息失败',
            icon: 'none'
          });
        }
      }
    }
  }
};